/**
 * 智能日志工具 - 根据环境自动控制日志输出
 * 开发环境：显示所有日志
 * 生产环境：只显示错误和警告，隐藏调试信息
 */

class Logger {
  constructor() {
    // 判断是否为开发环境
    this.isDevelopment = process.env.NODE_ENV === 'development'
    
    // 生产环境日志级别配置
    this.productionLevels = {
      error: true,    // 生产环境保留错误日志
      warn: true,     // 生产环境保留警告日志
      info: false,    // 生产环境隐藏信息日志
      log: false,     // 生产环境隐藏普通日志
      debug: false    // 生产环境隐藏调试日志
    }
  }

  /**
   * 检查是否应该输出日志
   * @param {string} level - 日志级别
   * @returns {boolean}
   */
  shouldLog(level) {
    if (this.isDevelopment) {
      return true // 开发环境显示所有日志
    }
    return this.productionLevels[level] || false
  }

  /**
   * 错误日志 - 生产环境保留
   */
  error(...args) {
    if (this.shouldLog('error')) {
      console.error(...args)
    }
  }

  /**
   * 警告日志 - 生产环境保留
   */
  warn(...args) {
    if (this.shouldLog('warn')) {
      console.warn(...args)
    }
  }

  /**
   * 信息日志 - 生产环境隐藏
   */
  info(...args) {
    if (this.shouldLog('info')) {
      console.info(...args)
    }
  }

  /**
   * 普通日志 - 生产环境隐藏
   */
  log(...args) {
    if (this.shouldLog('log')) {
      console.log(...args)
    }
  }

  /**
   * 调试日志 - 生产环境隐藏
   */
  debug(...args) {
    if (this.shouldLog('debug')) {
      console.debug(...args)
    }
  }

  /**
   * 开发专用日志 - 只在开发环境显示
   */
  dev(...args) {
    if (this.isDevelopment) {
      console.log('🔧 [DEV]', ...args)
    }
  }

  /**
   * 性能日志 - 只在开发环境显示
   */
  perf(...args) {
    if (this.isDevelopment) {
      console.log('⚡ [PERF]', ...args)
    }
  }

  /**
   * API请求日志 - 只在开发环境显示
   */
  api(...args) {
    if (this.isDevelopment) {
      console.log('🌐 [API]', ...args)
    }
  }

  /**
   * 组件日志 - 只在开发环境显示
   */
  component(...args) {
    if (this.isDevelopment) {
      console.log('🧩 [COMPONENT]', ...args)
    }
  }

  /**
   * 工具函数日志 - 只在开发环境显示
   */
  util(...args) {
    if (this.isDevelopment) {
      console.log('🛠️ [UTIL]', ...args)
    }
  }
}

// 创建单例实例
const logger = new Logger()

// 导出实例和类
export default logger
export { Logger }
